1부터 N까지 숫자 중 합이 10이 되는 조합 구하기

📔 문제 설명

정수 N을 입력받아 1부터 N까지의 숫자 중에서 합이 10이 되는 조합을 배열로 반환하는 solution()함수를 작성하세요.

📓 제약 조건

백트래킹을 활용해야 합니다.
숫자 조합은 오름차순으로 정렬되어야 합니다.
같은 숫자는 한 번만 선택할 수 있습니다.
N은 1 이상 10 이하인 정수입니다.

📓 입출력의 예

N result
5 [[1,2,3,4],[1,4,5],[2,3,5]]
2 []
7 [[1,2,3,4],[1,2,7],[1,3,6],[1,4,5],[2,3,5],[3,7],[4,6]]

❗ 1번째

백트래킹을 이용하라는 간단한 몸풀기 문제이다 크게 로직은 어렵지 않으니 잘 사용해보자

✅ 실행 코드

function solution(N) {
  const results = [];

  function back(sum, selectedNums, start) {
    if (sum === 10) {
      results.push(selectedNums);
      return;
    }

    for (let i = start; i <= N; i++) { 
      if (sum + i <= 10) {
        back(
          sum + i, selectedNums.concat(i), i + 1
        );
      }
    }
  }

  back(0, [], 1);
  return results;
}

📚 문제 느낀점

합이 10이 되는 조합만 골라야 하기때문에 불필요한 재귀 호출을 줄이고 중복없이 조합을 생성가능한 문제 백트래킹의 몸풀기 문제로 좋은거같다.


© 문제 출처

저자 출제